const fs = require('fs')
const fileService = require('../service/file.service')
const momentService = require('../service/moment.service')
const { PIC_PATH } = require('../app/file-path')
const wrapper = require('../wrapper')

class MomentController {

  // 创建动态
  async create(ctx) {
    try {
      // 1.获取用户的参数
      const user = ctx.user
      const { content } = ctx.request.body
      // 2.检测/插入数据
      const result = await momentService.create(content, user.id)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "创建动态失败")
    }
  }

  // 获取一条动态
  async getMomentById(ctx) {
    try {
      // 1.获取用户的参数
      const { momentId } = ctx.query
      // 2.操作数据库
      const result = await momentService.getMomentById(momentId)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "查询动态失败")
    }
  }

  // 获取动态列表
  async getMomentList(ctx) {
    try {
      // 1.获取用户的参数
      const { pageNo, pageSize } = ctx.query
      // 2.操作数据库
      const result = await momentService.getMomentList(pageNo, pageSize)
      if (!result.list) {
        result.list = []
        result.total = 0
      }
      result.pageNo = parseInt(pageNo)
      result.pageSize = parseInt(pageSize)
      if (result.total > pageNo * pageSize) {
        result.isEnd = false
      } else {
        result.isEnd = true
      }

      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取动态列表失败")
    }
  }

  // 删除一条动态
  async deleteMonentById(ctx) {
    try {
      // 1.获取用户的参数
      const { momentId } = ctx.query
      // 2.操作数据库
      const result = await momentService.deleteMomentById(momentId)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "删除动态失败")
    }
  }

  // 获取动态配图
  async picInfo(ctx) {
    try {
      // 1.获取参数
      const { momentId, filename } = ctx.params
      const { type } = ctx.query
      // 2.查询数据
      const { mimetype } = await fileService.getPicByMomentId(momentId, filename)
      // 3.返回头像
      ctx.response.set('content-type', mimetype)
      if (type === "sm") {
        ctx.body = fs.createReadStream(`${PIC_PATH}/${filename}-sm`)
      } else {
        ctx.body = fs.createReadStream(`${PIC_PATH}/${filename}`)
      }
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取配图失败")
    }
  }


}

module.exports = new MomentController()
